package main

import (
    "bytes"
    "encoding/json"
    "flag"
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
)

// Config 结构体用于存储 API 凭证
type Config struct {
    APIKey    string
    APISecret string
}

func main() {
    // 从环境变量中加载 API 凭证
    // config := Config{
    //     APIKey:    os.Getenv("VOLCENGINE_API_KEY"),
    //     APISecret: os.Getenv("VOLCENGINE_API_SECRET"),
    // }

    config := Config{
        APIKey:   "AKLTNjk2N2MyMGE1OGNiNGUzNzg0NzI1OTI2ZTg5NjViNGY",
        APISecret:  "WkRNMFpUVTRNbU5tWTJNeE5ERTFZemsyTlRZeU9UazNNVEkxTkRBNE5EUQ==",
    }

    if config.APIKey == "" || config.APISecret == "" {
        fmt.Fprintln(os.Stderr, "请设置 VOLCENGINE_API_KEY 和 VOLCENGINE_API_SECRET 环境变量")
        os.Exit(1)
    }

    // 解析命令行参数
    var text string
    flag.StringVar(&text, "text", "", "要翻译的中文文本")
    flag.Parse()

    // 如果未通过参数提供文本，则从标准输入读取
    if text == "" {
        data, err := ioutil.ReadAll(os.Stdin)
        if err != nil {
            fmt.Fprintln(os.Stderr, "读取输入错误:", err)
            os.Exit(1)
        }
        text = string(data)
    }

    // 执行翻译
    translated, err := translate(text, config)
    if err != nil {
        fmt.Fprintln(os.Stderr, "翻译错误:", err)
        os.Exit(1)
    }

    // 输出翻译结果
    fmt.Println(translated)
}

// translate 函数调用火山引擎 API 进行翻译
func translate(text string, config Config) (string, error) {
    // 示例端点（需替换为实际的 API 端点）
    url := "https://translate.volcengine.com/api/v1/translate"

    // 构造请求负载（根据实际 API 文档调整）
    payload := map[string]string{
        "text":            text,
        "source_language": "zh",
        "target_language": "en",
    }
    jsonPayload, err := json.Marshal(payload)
    if err != nil {
        return "", err
    }

    // 创建 HTTP 请求
    req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonPayload))
    if err != nil {
        return "", err
    }

    // 设置请求头（根据实际 API 要求调整）
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("X-API-Key", config.APIKey)
    // 如果需要其他认证方式，例如签名，请参考官方文档添加

    // 发送请求
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()

    // 检查 API 响应状态
    if resp.StatusCode != http.StatusOK {
        body, _ := ioutil.ReadAll(resp.Body)
        return "", fmt.Errorf("API 调用失败: %s", string(body))
    }

    // 读取并解析响应
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return "", err
    }

    var result map[string]interface{}
    err = json.Unmarshal(body, &result)
    if err != nil {
        return "", err
    }

    // 提取翻译结果（根据实际响应格式调整）
    translation, ok := result["translation"].(string)
    if !ok {
        return "", fmt.Errorf("响应格式无效")
    }

    return translation, nil
}
